/******************************************************************/
/*                                                                */
/*  Winpooch : Windows Watchdog                                   */
/*  Copyright (C) 2004-2007  Benoit Blanchon                      */
/*                                                                */
/*  This program is free software; you can redistribute it        */
/*  and/or modify it under the terms of the GNU General Public    */
/*  License as published by the Free Software Foundation; either  */
/*  version 2 of the License, or (at your option) any later       */
/*  version.                                                      */
/*                                                                */
/*  This program is distributed in the hope that it will be       */
/*  useful, but WITHOUT ANY WARRANTY; without even the implied    */
/*  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR       */
/*  PURPOSE.  See the GNU General Public License for more         */
/*  details.                                                      */
/*                                                                */
/*  You should have received a copy of the GNU General Public     */
/*  License along with this program; if not, write to the Free    */
/*  Software Foundation, Inc.,                                    */
/*  675 Mass Ave, Cambridge, MA 02139, USA.                       */
/*                                                                */
/******************************************************************/

#ifndef _SYMBOLS_H
#define _SYMBOLS_H

#include "Types.h"

typedef void* HSYMFILE ;

typedef void* HSYMKERN ;


HSYMFILE SymFile_NewA (UINT nProcCount, LPCSTR* aProcName) ;

HSYMFILE SymFile_NewW (UINT nProcCount, LPCWSTR* aProcName) ;


HSYMFILE SymFile_LoadA (LPCSTR szFilename) ;

HSYMFILE SymFile_LoadW (LPCWSTR szFilename) ;

BOOL SymFile_SaveA (HSYMFILE hSymFile, LPCSTR szFilename) ;

BOOL SymFile_SaveW (HSYMFILE hSymFile, LPCWSTR szFilename) ;

VOID	SymFile_CloseFile (HSYMFILE hSymFile) ; 


HSYMKERN SymFile_AddKernel (HSYMFILE hSymFile) ;

HSYMKERN SymFile_GetKernelA (HSYMFILE hSymFile, LPCSTR szSignature) ;

HSYMKERN SymFile_GetKernelW (HSYMFILE hSymFile, LPCWSTR szSignature) ;

BOOL SymFile_SetKernelNameA (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCSTR szName) ;

BOOL SymFile_SetKernelNameW (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCWSTR szName) ;

BOOL SymFile_SetKernelSignatureA (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCSTR szSignature) ;

BOOL SymFile_SetKernelSignatureW (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCWSTR szSignature) ;


INT_PTR SymFile_GetProcAddressA (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCSTR szProcName) ;

INT_PTR SymFile_GetProcAddressW (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCWSTR szProcName) ;

BOOL SymFile_SetProcAddressA (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCSTR szProcName, INT_PTR nProcAddress) ;

BOOL SymFile_SetProcAddressW (HSYMFILE hSymFile, HSYMKERN hSymKern, LPCWSTR szProcName, INT_PTR nProcAddress) ;


#ifndef _UNICODE

#define SymFile_New			SymFile_NewA
#define SymFile_Load			SymFile_LoadA
#define SymFile_Save			SymFile_SaveA
#define SymFile_GetKernel		SymFile_GetKernelA
#define SymFile_SetKernelName		SymFile_SetKernelNameA
#define SymFile_SetKernelSignature	SymFile_SetKernelSignatureA
#define SymFile_GetProcAddress		SymFile_GetProcAddressA
#define SymFile_SetProcAddress		SymFile_SetProcAddressA

#else

#define SymFile_New			SymFile_NewW
#define SymFile_Load			SymFile_LoadW
#define SymFile_Save			SymFile_SaveW
#define SymFile_GetKernel		SymFile_GetKernelW
#define SymFile_SetKernelName		SymFile_SetKernelNameW
#define SymFile_SetKernelSignature	SymFile_SetKernelSignatureW
#define SymFile_GetProcAddress		SymFile_GetProcAddressW
#define SymFile_SetProcAddress		SymFile_SetProcAddressW

#endif

#endif
